// Copyright 2004-7 A. Sean Pue - All Rights Reserved
// * Licensed only for use on Desertful of Roses website (sorry).
// Version 1.4c (3/16/09) - removed force virama again at request of fran
// Version 1.4b (12/30/07) - added quick fix for 'kah'
// Version 1.4a (9/27/07) - added shikvah to href
// Version 1.4 (9/2/07)
// The fun never ends: added stanza as href to pass parameter to.
// Version 1.4beta (12/31/06) -
// added force virama again at request of Mohsin Naquvi. Fran asked me to remove it back on 4/11/03 due to weird conjuncts.
// It's possible that with current fonts it might look okay, so will try again for a few days.
//
// Version 1.3f (5/17/05
// Changed h-e for he + hamza as not supported by Nafees...
//Version 1.3e (11/28/04)
//Problem in IE with aah-o-faryaad... Removed weak sun/moon support to fix.
// Version 1.3d (10/11/04)
// addd hazma
// Version 1.3c (9/92/04
// tanviin changed from .n to :n (ie 143,1)
//
// Version 1.3b (9/27/04)
//
//Dear Sean,
//The index for ghazal {21} displays properly in IE for the first verse, then
//for the first line of the second verse. Then the second line of the second
//verse looks like gibberish, and all the rest of the verses refuse to convert
//to Urdu at all.
//I've looked at the code in Dreamweaver, and I swear there's NOTHING
//different about the coding for these. HELP!!
//fran
// Problem: AdddUrduLetter( -> AddUrduLetter ln 545
// Version 1.3 (9/20/04
// Changed Kaaf to \u06A9. Added support for Nafees Nastaliq. Replaced hamza on he with he + alif.
// Version 1.2i (1/29/03)
// It has recently come to my attention that the bari yeh does not work in intial/medial positions, which in my opinion is incredibly stupid... That is with Microsoft Sans Serif and with Tahoma font. Perhaps others will function correctly. I have corrected for that in this version.
// Version 1.2h (1/17/03)
// Fixed yehs - previously using Arabic yehs for connectors due to problems with a font I was using at beginning of coding. Now using Persian yehs and bari yehs, which work correctly.
// Problem with Parentheses encountered, which has to do with RTL / LTR issues. Previously was changing direction of Urdu blocks with [node].style.direction attribute but needed instead to use [node].dir in Javascript to properly simulate "dir" block which works correctly. The problem with the parentheses has to do with mirroring.
// Added parentheses as non-joining characters to the script. Perhaps in the future these can be resolved by turning to the Unicode standard and loading its array into my script so as to avoid having to manually hard-code non connectors... Or perhaps better yet would be to load 'connectors' in and differentiate out of those, ie if not a connector - or better yet build into internal character array.
//
//
// Version 1.2g (1/7/03)
// Fixed gh again... Update lost in cybercafe?
//
// Version 1.2f (16/5/03
// fixed gh error and 1.2e which was wordwrapped to death
// Version 1.2d (4/25/03)
// fixed problem in nagari from 1.2c (lost variable conversion during changes);
// fixed 'gh' problem which was missing in numerous arrays.
// Version 1.2c (4/11/03
// removed force viramas
// turned back vuh, yih conversions, turned back on karanaa, karane
// Version 1.2b (4/3/03)
// 1.2b added force virama, which was taken out for some reason...
// 1.2 Removed all devanagari corrections
// added "z" as non-connector, i.e. for sabzah-e - was showing up with final form he + izafat, now gol he+izafat
// added "zh" as non-connector, ""
// added "'" as step-advance to devanagari (was showing up as ' when not followed by -haa, ie vaj'h-e...)
// removed a(( correction
// removed transformation of words ending in -ah -> aa
// removed transformations of baskih, kih, nah, karnaa, yah, vuh, karne, bah, kah
// 1.1b added lucida sans unicode as 1st default for transliteration; removed lang bar from main index page
/*
function report_error(msg, url, line) {
document.write('Urdu, devanagari, and transliterated scripts are available on more advanced browsers -- more information');
}
self.onerror = report_error;
window.onerror = report_error;
var s = "DOM Compatibility Test";
document.createTextNode(s);
x = document.body.childNodes.length; // fails netscape 4.8
*/
var UrduS
var PreviousULetter
var LettersinUWord
var RomanMemo
var RomanCounter
var RomanLength
var OneCharacter
var TwoCharacters
var ThreeCharacters
var FourCharacters
var PreviousTransliteratedString
var CurrentTransliteratedString
var Retroflex
/* Global Constants */
var AIN = "\u0639";
var ALEF = "\u0627";
var BARI_YEH = "\u06D2";
var BEH = "\u0628";
var CHEH = "\u0686";
var CR = "\u000D";
var DAD = "\u0636";
var DAL = "\u062F";
var DDAL = "\u0688";
var DOCHASHMI = "\u06BE";
var DOTLESS_NOON = "\u06BA";
var ARABIC_FATHATAN = "\u064B";
var FEH = "\u0641";
var GAF = "\u06AF";
var GHAIN = "\u063A";
var HAH = "\u062D";
var HAMZA = "\u0626"; // Was h621
var HAMZA_ON_ALEF = "\u0622";
var HAMZA_ON_BARI_YEH = "\u06D2\u0654";
var HAMZA_ON_HAH = "\u0681";//47\u0626";// was \u0681";
var HAMZA_ON_GOL_HEH = "\u06C1\u0654";//changed
var HAMZA_ON_HEH = "\u06C1\u0654";// was \\u06C2";
var HAMZA_ON_WAW = "\u0624";
var HAMZA_ON_YEH = "\u0626";
var HEH = "\u0647";
var HEH_MAN = "\u06C1";
var JEEM = "\u062C";
var Joiner = "\u200D";
var KAF = "\u06A9";/*u0643*/
var KHAH = "\u062E";
var LAM = "\u0644";
var LB = "\u000A";
var MADDA_ON_ALEF = "\u0622";
var MEEM = "\u0645";
var NonJoiner = "\u200C";
var NOON = "\u0646";
var PEH = "\u067E";
var QAF = "\u0642";
var REH = "\u0631";
var RRE = "\u0691";
var SAD = "\u0635";
var SEEN = "\u0633";
var SHEEN = "\u0634";
var SpaceBar = " ";
var TASHDID = "\u0651";
var TAH = "\u0637";
var TEH = "\u062A";
var THAL = "\u0630";
var SEH = "\u062B";
var THHE = "\u0679";
var WAW = "\u0648";
var YEH = "\u06CC"; // u064A
var YEH_FINAL = "\u06CC";
var ZAH = "\u0638";
var ZAIN = "\u0632";
var ZEH = "\u0632";
var ZER = "\u0650";
var ZHE = "\u0698";
var ARABIC_QUESTION_MARK = "\u061F";
var ARABIC_COMMA = "\u060C";
var ARABIC_SEMI_COLON = "\u061B";
var DNL_TTA = "\u091F";
var DAGGER_ALEF = YEH_FINAL+"\u0670";
// alert("\uFC5D");
var CharArray = new Array
("ii-e","ai-e","aa-e","uu-e","(-e)",
"))o","))uu", // hamza on vao
"e-e","h-e","chh",";Th",";Dh",";aa", // removed -o
"aa",";T",";s","ch",";h",";x",";D",";z",";Rh",";R","zh","sh",
".s",".z",":t",":z","((",";G",":n","uu","au","ai","ii","))","-e",";N","jh","bh","th","kh","ph","dh","gh",
" ","b","p","t","j","d","r","z","s","f","q","k","g","l","m","n","o","v","h","e","i","a","u",",","-",
"y", "'","\u000D","\u000A","?",",",";",")","(");
// ---------------------------------- DEVANAGARI _________________________
// Various signs
var DNS_CANDRABINDU = "\u0901";
var DNS_ANUSVARA = "\u0902";
var DNS_VISARGA = "\u0903";
// independent vowels
var DNL_A = "\u0905";
var DNL_AA = "\u0906";
var DNL_I = "\u0907";
var DNL_II = "\u0908";
var DNL_U = "\u0909";
var DNL_UU = "\u090A";
//var DNL_V_R = "\u090B";
//var DNL_ = "\u090C";
//var DNL_ = "\u090D";
//var DNL_ = "\u090E";
var DNL_E = "\u090F";
var DNL_AI = "\u0910";
//var DNL_ = "\u0911";
//var DNL_ = "\u0912";
var DNL_O = "\u0913";
var DNL_AU = "\u0914";
// Consonants
var DNL_KA ="\u0915";
var DNL_KHA ="\u0916";
var DNL_GA ="\u0917";
var DNL_GHA ="\u0918";
var DNL_NGA ="\u0919";
var DNL_CA ="\u091A";
var DNL_CHA ="\u091B";
var DNL_JA ="\u091C";
var DNL_JHA ="\u091D";
var DNL_NYA ="\u091E";
var DNL_TTA ="\u091F";
var DNL_TTHA ="\u0920";
var DNL_DDA ="\u0921";
var DNL_DDHA ="\u0922";
//var DNL_NNA ="\u0923";
var DNL_TA ="\u0924";
var DNL_THA ="\u0925";
var DNL_DA ="\u0926";
var DNL_DHA ="\u0927";
var DNL_NA ="\u0928";
// var DNL_ ="\u0929";
var DNL_PA ="\u092A";
var DNL_PHA ="\u092B";
var DNL_BA ="\u092C";
var DNL_BHA ="\u092D";
var DNL_MA ="\u092E";
var DNL_YA ="\u092F";
var DNL_RA ="\u0930";
// var DNL_ ="\u09";
var DNL_LA ="\u0932";
var DNL_VA ="\u0935";
var DNL_SHA ="\u0936";
var DNL_SSA ="\u0937";
var DNL_SA ="\u0938";
var DNL_HA ="\u0939";
// Various Signs
var DNS_NUKTA ="\u093C";
var DNVS_AA ="\u093E";
// Dependent vowel signs
var DNVS_I ="\u093F";
var DNVS_II ="\u0940";
var DNVS_U ="\u0941";
var DNVS_UU ="\u0942";
// var DNVS_VOCALIC_R ="\u0943";
//var DNVS_VOCALIC_RR ="\u0944";
var DNVS_CANDRA_E ="\u0945";
//var DNVS_SHORT_E ="\u0946";
var DNVS_E ="\u0947";
var DNVS_AI ="\u0948";
//var DNVS_CANDRA_O ="\u0949";
//var DNVS_SHORT_O ="\u094A";
var DNVS_O ="\u094B";
var DNVS_AU ="\u094C";
// Various signs
var DNS_VIRAMA ="\u094D"; // = halant, suppresses inherent vowel
//var DN_OM ="\u0950";
// Additional Consonants
var DNL_QA ="\u0958";
var DNL_KHHA ="\u0959";
var DNL_GHHA ="\u095A";
var DNL_ZA ="\u095B";
var DNL_DDDHA ="\u095C"; // = ;R
var DNL_RHA ="\u095D";
var DNL_FA ="\u095E";
var dn_array = new Array
("chh",";Th",";Dh",";aa",// "a((",
"aa",";T",";s","ch",";h",";x",";D",";z",";Rh",";R","zh","sh",
".s",".z",":t",":z","((",";G",":n","uu","au","ai","ii","))","-e",";N","jh","bh","th","kh","ph","dh","gh",
"b","p","t","j","d","r","z","s","f","q","k","g","l","m","n","o","v","h","e","i","a","u","y");
var dn_consonants = new Array
("chh",";Th",";Dh",
";T",";s","ch",";h",";x",";D",";z",";Rh",";R","zh","sh",
".s",".z",":t",":z",";G",":n","jh","bh","th","kh","ph","dh","gh",
"b","p","t","j","d","r","z","s","f","q","k","g","l","m","n","v","h","y");
var dn_take_dependents = new Array
("chh",";Th",";Dh",
";T",";s","ch",";h",";x",";D",";z",";Rh",";R","zh","sh",
".s",".z",":t",":z",";G",";N","jh","bh","th","kh","ph","dh","gh",
"b","p","t","j","d","r","z","s","f","q","k","g","l","m","n","v","h","y");
var dn_vowels = new Array
(";aa","aa","uu","au","ai","ii","-e","o","e","i","a","u"); //"a((",
var UC_Array = new Array
(
";aa","aa",";T",";s",";h",";x",";D",";z",";Rh",";R",".s",".z",":t",":z","((",";G",";N","uu","ii","))",":n"
);
function Mid (s,s_counter,s_length) {
MidS = s.substring((s_counter-1),(s_counter-1+s_length))
return MidS
}
function InArray(A,S){
for (i=0; iRomanLength) || (EOWCounter<=1)) { // check EOWCounter
return true;
}
NextSingleChar = Mid(RomanMemo,EOWCounter,1);
WordEndingCharacters = new Array ("\u000D"," ","-","!",",","\u0000","\u000A","?");
if (InArray(WordEndingCharacters,NextSingleChar)) {
return true;
}
return false;
}
function AddUrduLetter(UnicodeValue) { // 1 +
if (UrduS == "") {
UrduS = UnicodeValue;
} else if ( (UnicodeValue==PreviousULetter)
&& ((CurrentTransliteratedString == PreviousTransliteratedString) || (Retroflex==true)) ) {
UrduS = UrduS + TASHDID; //String.fromCharCode(TASHDID)
} else {
UrduS = UrduS + UnicodeValue; // String.fromCharCode(UnicodeValue)
}
PreviousULetter = UnicodeValue;
LettersinUWord = LettersinUWord+1;
PreviousTransliteratedString = CurrentTransliteratedString;
}
function JustAddUrduLetter(UnicodeValue) { // 2 +
if (UrduS == "") {
UrduS = UnicodeValue;
} else {
UrduS = UrduS + UnicodeValue;
}
}
function AddRetroflexLetter(UnicodeValue){
Retroflex = true;
AddUrduLetter(UnicodeValue);
Retroflex = false;
AddUrduLetter (DOCHASHMI);
}
function IsNonConnector(UrduL) { //5 +
NonConnectors = new Array (CR,LB,SpaceBar,DAL,ALEF,HAMZA_ON_ALEF,HAMZA_ON_WAW,HAMZA_ON_YEH,THAL,ZEH, ZHE,REH, WAW) // something missing? - yes, added zeh, zhe
if (InArray(NonConnectors,UrduL)) {
return true
} else {
return false
}
}
function PreviousLetterDoesntConnect(TheCounter) { // 6 +
if (TheCounter < 1) {
return true
} else if ((EndOfWord(TheCounter)) || (IsNonConnector(PreviousULetter))) {
return true
} else {
return false
}
}
/* function Chr (Code) {
s = String.fromCharCode(Code);
return s
}
*/
function ResetWordCounters() { // 11 +
// AddUrduLetter(NonJoiner);
PreviousULetter = "";
LettersinUWord = 0;
PreviousTransliteratedString = "";
// CurrentTransliteratedString = "";
}
Vowels = new Array ("a","i","u","o","au","uu","ai","e","ii");
function IsAVowel(S) { // 13 +
return InArray(Vowels,S);
}
function GetTransliteratedString(){
for (i=0; i255) {US = US+''+UrduS.charCodeAt(i)+';'} else {US = US + UrduS.charAt(i);} // 65539;
}
alert(US);
UrduS = ""+US; // New - added non-joiner to attempt to fix problem w/ parentheses
document.write(UrduS);
// new --
*/
return UrduS;
}
// ------------------------------------- D E V A N A G A R I -----------------------------------------------------
var dn_cts = "";
var prev_dn_cts = "";
var dn_rmemo = "";
var dn_rmemo_idx = 0;
function GetTransliteratedStringFrom(RC){
for (i=0; i0) { // pass parameter to all local sites;
is_our_href = true;
} else {
return -1;
}
/* else
if (the_href.indexOf("..")>=0) {
is_our_href = true;
}
else if ( the_href.indexOf("about/")>=0) {
is_our_href = true;
}
else if ( ( the_href.charAt(html_index-3) == '_' ) &&
( parseInt( the_href.substring(html_index-2,html_index) )!=NaN ) ) {
is_our_href = true;}
// looking for index_###.html
else if ( the_href.substring(html_index-9,html_index-3) == "index_" ) {
is_our_href = true;}
// looking for *_index.html -> ghazal_index, radif_index,
else if (the_href.substring(html_index-6,html_index) == "_index"){
is_our_href = true; }
else if (the_href=="index.html") {
is_our_href = true;
}
// grabs apparatus files
else if (the_href.indexOf("apparatus/")>=0) {
is_our_href = true; }
else if (the_href.indexOf("sitemap")>=0) {
is_our_href = true; }
else if (the_href.indexOf("ghazindex")>=0) {
is_our_href = true; }
else if (the_href.indexOf("radindex")>=0) {
is_our_href = true; }
else if (the_href.indexOf("stanza")>=0) {
is_our_href = true; }
else if (the_href.indexOf("00urdu")>=0) {
is_our_href = true;}
else if (the_href.indexOf("masjid")>=0) {
is_our_href = true;
}
else if (the_href.indexOf("shikvah")>=) {
is_our_href = true;
}*/
var pattern = /^(.+?)(?:\?.*)*(#.+)*$/;
var results = the_href.match(pattern);
var new_href = results[1]+"?"+display_lang;
if (results[2]!=null) {
new_href += results[2];
}
//
// var pattern_replace = "$1"+'?'+display_lang+"$2";
// new_href = the_href.replace(pattern,pattern_replace);
N.nodeValue = new_href;
/*
if (is_our_href) {
if ((the_href.length-html_index)>5) {
new_href = the_href.substring(0,html_index+5)+"?"+display_lang+the_href.substring(html_index+5,the_href.length);
} else {
new_href = the_href + "?" + display_lang;
}
N.nodeValue = new_href;
}
*/
}
thelevel = 0;
function parseNode(N){
for (var v = 0; v < N.childNodes.length; v++) {
var vv = N.childNodes[v];
if (vv.attributes!=null) {
// alert (vv.nodeName);
for (var g = 0; g < vv.attributes.length; g ++){ // must be a more elegant way of doing this...
vvv = vv.attributes[g];
if (vvv.nodeName == "href") {
parsehrefnode(vvv);
}
}
}
if (vv.className == "urdu") {
parseEM(vv);}
parseNode(vv);
thelevel = thelevel -1;
}
}
function addlangbar_button(lg_bar,button_lang,button_text,button_search) {
if (button_lang == display_lang) {
lg_bar.appendChild(document.createTextNode(button_text))
} else {
var new_button = document.createElement("a");
lg_bar.appendChild(new_button);
new_button.appendChild(document.createTextNode(button_text));
new_button.setAttribute("href",document.location.pathname+button_search);
}
}
function addmoreinfo_button(lg_bar) {
var new_button = document.createElement("a");
lg_bar.appendChild(new_button);
new_button.appendChild(document.createTextNode("more information"));
new_button.setAttribute("href","http://www.columbia.edu/~asp49/00ghalib/moreinfo.html");
new_button.setAttribute("target","_blank");
}
function put_language_bar_in_right_place(lb) {
document.body.appendChild(lb);
for (var z = 0; z < document.body.childNodes.length; z++) {
if (document.body.childNodes[z].className=="verse") {
document.body.insertBefore(lb,document.body.childNodes[z]); break;
} else if (document.body.childNodes[z].className=="verse-entry") {
document.body.insertBefore(lb,document.body.childNodes[z]); break;
}
}
}
function addlangbar() {
languagebar = document.createElement("div");
// document.body.appendChild(languagebar);
put_language_bar_in_right_place(languagebar);
// languagebar.setAttribute("class","navbar");
// languagebar.style.marginTop='2px';// languagebar.style.marginBottom='2px';
languagebar.style.display='block';
languagebar.style.border='9px outset #ccc';
languagebar.style.fontSize='12pt';
languagebar.style.backgroundColor='transparent';
languagebar.style.fontFamily = "lucida sans unicode";
languagebar.style.padding='2px 0px 4px 0px';
languagebar.style.fontWeight='normal';
languagebar.style.textAlign='center';
languagebar.marginLeft='auto';
languagebar.style.marginRight='auto';
languagebar.appendChild(document.createTextNode(" -- "));
addlangbar_button(languagebar,"urdu","urdu script","?urdu");
languagebar.appendChild(document.createTextNode(" -- "));
addlangbar_button(languagebar,"nagari","devanagari","?nagari");
languagebar.appendChild(document.createTextNode(" -- "));
addlangbar_button(languagebar,"unicode","diacritics","?unicode");
languagebar.appendChild(document.createTextNode(" -- "));
addlangbar_button(languagebar,"","plain roman","?"+RomanCode);
languagebar.appendChild(document.createTextNode(" -- "));
addmoreinfo_button(languagebar);
languagebar.appendChild(document.createTextNode(" -- "));
}
// start!
display_lang = "";
if (location.search.substring(1,5)=="urdu") { // ?urdu
display_lang = "urdu";
}
else if (location.search.substring(1,8)=="nagari") { // ?nagari
display_lang = "nagari";
}
else if (location.search.substring(1,9)=="unicode") {
display_lang = "unicode";
}
/* cut from here
else if (location.search.substring(1,7)=="roman") {
display_lang = RomanCode;
}
else { display_lang = "not_on"; }
to here */
if (display_lang!="not_on") {
for (var z = 0; z < document.body.childNodes.length; z++) {
parseNode(document.body.childNodes[z]);
}
}
// alert("Parsed");
if (ShowLanguageBar ==true) {addlangbar();}
// alert("added langbar");
for (var z = 0; z < document.body.childNodes.length; z++) {
if (document.body.childNodes[z].nodeName == "SCRIPT") {
document.body.removeChild(document.body.childNodes[z]);
}
}
// alert("Removed script");